0x60a06040523480156200001157600080fd5b50604051620029f3380380620029f383398101604081905262000034916200004a565b60601b6001600160601b0319166080526200007a565b6000602082840312156200005c578081fd5b81516001600160a01b038116811462000073578182fd5b9392505050565b60805160601c6129566200009d600039806104d45280610cff52506129566000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063c45a01551161005b578063c45a0155146100e4578063c6a5026a146100f9578063cdca17531461010c578063d85c3d631461011f5761007d565b80632f80bb1d1461008257806386e3a7cf146100ae578063bd21704a146100d1575b600080fd5b6100956100903660046124db565b610132565b6040516100a5949392919061281f565b60405180910390f35b6100c16100bc366004612635565b6102e9565b6040516100a594939291906128ba565b6100c16100df366004612583565b61042a565b6100ec6104d2565b6040516100a591906127fd565b6100c1610107366004612583565b6104f6565b61009561011a3660046124db565b61058b565b6100c161012d36600461259e565b610720565b6000606080600061014286610818565b67ffffffffffffffff8111801561015857600080fd5b50604051908082528060200260200182016040528015610182578160200160208202803683370190505b50925061018e86610818565b67ffffffffffffffff811180156101a457600080fd5b506040519080825280602002602001820160405280156101ce578160200160208202803683370190505b50915060005b60008060006101e28a610829565b925092509250600080600061023d6040518060a00160405280876001600160a01b03168152602001886001600160a01b031681526020018e81526020018662ffffff16815260200160006001600160a01b031681525061042a565b50925092509250818a888151811061025157fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508089888151811061027e57fe5b602002602001019063ffffffff16908163ffffffff1681525050829b5086806001019750506102ac8d61085a565b156102c1576102ba8d610862565b9c506102d5565b508a9950600096506102e095505050505050565b5050505050506101d4565b92959194509250565b60008060008060008060008088602001516001600160a01b031689600001516001600160a01b031610905060008960800151905060008a60a001516001600160a01b03166000141561033c575060408a01515b6000604051806080016040528085151581526020016001151581526020018d6060015162ffffff1681526020018d60a001516001600160a01b0316600014610388578d60a001516103ae565b856103a75773fffd8963efd1fc6a506488495d951d5263988d256103ae565b6401000276a45b6001600160a01b031681525090506103d6836103cd8e6040015161087f565b60000383610895565b909c509a509097509550600087136103ee57856103f0565b865b9a50600087136104035786600003610408565b856000035b9450811561041c5781851461041c57600080fd5b505050505050509193509193565b6000806000806000610449866000015187602001518860600151610cf8565b905060006040518060c0016040528088600001516001600160a01b0316815260200188602001516001600160a01b0316815260200188604001518152602001886060015162ffffff168152602001836001600160a01b0316815260200160006001600160a01b031681525090506104bf816102e9565b5091999098509096509294509192505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806000806000610515866000015187602001518860600151610cf8565b905060006040518060c0016040528088600001516001600160a01b0316815260200188602001516001600160a01b0316815260200188604001518152602001836001600160a01b03168152602001886060015162ffffff16815260200160006001600160a01b031681525090506104bf81610720565b6000606080600061059b86610818565b67ffffffffffffffff811180156105b157600080fd5b506040519080825280602002602001820160405280156105db578160200160208202803683370190505b5092506105e786610818565b67ffffffffffffffff811180156105fd57600080fd5b50604051908082528060200260200182016040528015610627578160200160208202803683370190505b50915060005b600080600061063b8a610829565b92509250925060008060006106966040518060a00160405280886001600160a01b03168152602001876001600160a01b031681526020018e81526020018662ffffff16815260200160006001600160a01b03168152506104f6565b50925092509250818a88815181106106aa57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050808988815181106106d757fe5b602002602001019063ffffffff16908163ffffffff1681525050829b5086806001019750506107058d61085a565b156102c1576107138d610862565b9c5050505050505061062d565b600080600080600080600087602001516001600160a01b031688600001516001600160a01b03161090506000886060015190506000604051806080016040528084151581526020016000151581526020018b6080015162ffffff1681526020018b60a001516001600160a01b031660001461079f578b60a001516107c5565b846107be5773fffd8963efd1fc6a506488495d951d5263988d256107c5565b6401000276a45b6001600160a01b031681525090506107ea826107e48c6040015161087f565b83610895565b909a509850909550935060008513610805578460000361080a565b836000035b985050505050509193509193565b80516017601319909101045b919050565b600080806108378482610d36565b9250610844846014610de6565b9050610851846017610d36565b91509193909250565b516042111590565b805160609061087990839060179060161901610e8d565b92915050565b6000600160ff1b821061089157600080fd5b5090565b6000808313602083015280806001816108ad88610fe0565b905060006040518060e001604052808981526020016000815260200183600001516001600160a01b03168152602001836020015160020b81526020016000815260200160006001600160801b031681526020018a6001600160a01b0316631a6865026040518163ffffffff1660e01b815260040160206040518083038186803b15801561093957600080fd5b505afa15801561094d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097191906126af565b6001600160801b0316905290505b8051158015906109a9575086606001516001600160a01b031681604001516001600160a01b031614155b15610cb4576109b661238c565b6040808301516001600160a01b03168252830151606083015189516109de928d9290916110fb565b15156040830152600290810b810b60208301819052620d89e719910b1215610a0f57620d89e7196020820152610a2e565b6020810151620d89e860029190910b1315610a2e57620d89e860208201525b610a3b81602001516112f7565b6001600160a01b0316606082015260408201518851610abe9190610a7b5789606001516001600160a01b031683606001516001600160a01b031611610a99565b89606001516001600160a01b031683606001516001600160a01b0316105b610aa7578260600151610aad565b89606001515b60c0850151855160408d0151611629565b60c085015260a084015260808301526001600160a01b03166040830152602088015115610b2457610af88160c0015182608001510161087f565b825103825260a0810151610b1a90610b0f9061087f565b60208401519061181b565b6020830152610b5f565b610b318160a0015161087f565b825101825260c08101516080820151610b5991610b4e910161087f565b602084015190611831565b60208301525b80606001516001600160a01b031682604001516001600160a01b03161415610c7357806040015115610c4957602081015160405163f30dba9360e01b81526000916001600160a01b038d169163f30dba9391610bbd91600401612811565b6101006040518083038186803b158015610bd657600080fd5b505afa158015610bea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0e91906126c9565b505050505050915050886000015115610c25576000035b610c338360c0015182611847565b6001600160801b031660c0840152506001909301925b8751610c59578060200151610c62565b60018160200151035b600290810b900b6060830152610cae565b80600001516001600160a01b031682604001516001600160a01b031614610cae57610ca182604001516118fd565b600290810b900b60608301525b5061097f565b60208701518751151590151514610cd357602081015181518903610ce0565b8060000151880381602001515b604090920151909a9199509750919550909350505050565b6000610d2e7f0000000000000000000000000000000000000000000000000000000000000000610d29868686611c1c565b611c72565b949350505050565b600081826014011015610d85576040805162461bcd60e51b8152602060048201526012602482015271746f416464726573735f6f766572666c6f7760701b604482015290519081900360640190fd5b8160140183511015610dd6576040805162461bcd60e51b8152602060048201526015602482015274746f416464726573735f6f75744f66426f756e647360581b604482015290519081900360640190fd5b500160200151600160601b900490565b600081826003011015610e34576040805162461bcd60e51b8152602060048201526011602482015270746f55696e7432345f6f766572666c6f7760781b604482015290519081900360640190fd5b8160030183511015610e84576040805162461bcd60e51b8152602060048201526014602482015273746f55696e7432345f6f75744f66426f756e647360601b604482015290519081900360640190fd5b50016003015190565b60608182601f011015610ed8576040805162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b604482015290519081900360640190fd5b828284011015610f20576040805162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b604482015290519081900360640190fd5b81830184511015610f6c576040805162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b604482015290519081900360640190fd5b606082158015610f8b5760405191506000825260208201604052610fd5565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015610fc4578051835260209283019201610fac565b5050858452601f01601f1916604052505b5090505b9392505050565b610fe86123c8565b816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561102157600080fd5b505afa158015611035573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611059919061276f565b5050505050600290810b900b6020808401919091526001600160a01b039182168352604080516334324e9f60e21b815290519285169263d0c93a7c92600480840193919291829003018186803b1580156110b257600080fd5b505afa1580156110c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ea9190612569565b600290810b900b6040820152919050565b60008060008560020b8560020b8161110f57fe5b05905060008560020b12801561113657508560020b8560020b8161112f57fe5b0760020b15155b1561114057600019015b83156112175760008061115283611d56565b6040805163299ce14b60e11b8152600184810b6004830152915193955091935060ff84161b8001600019019160009183916001600160a01b038e1691635339c296916024808301926020929190829003018186803b1580156111b357600080fd5b505afa1580156111c7573d6000803e3d6000fd5b505050506040513d60208110156111dd57600080fd5b50511680151596509050856111f957898360ff1686030261120c565b8961120382611d68565b840360ff168603025b9650505050506112ed565b60008061122683600101611d56565b91509150600060018260ff166001901b031990506000818b6001600160a01b0316635339c296866040518263ffffffff1660e01b8152600401808260010b815260200191505060206040518083038186803b15801561128457600080fd5b505afa158015611298573d6000803e3d6000fd5b505050506040513d60208110156112ae57600080fd5b50511680151596509050856112d057898360ff0360ff168660010101026112e6565b89836112db83611e08565b0360ff168660010101025b9650505050505b5094509492505050565b60008060008360020b1261130e578260020b611316565b8260020b6000035b9050620d89e8811115611354576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b60006001821661136857600160801b61137a565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff16905060028216156113ae576ffff97272373d413259a46990580e213a0260801c5b60048216156113cd576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b60088216156113ec576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b601082161561140b576fffcb9843d60f6159c9db58835c9266440260801c5b602082161561142a576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615611449576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615611468576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615611488576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b6102008216156114a8576ff987a7253ac413176f2b074cf7815e540260801c5b6104008216156114c8576ff3392b0822b70005940c7a398e4b70f30260801c5b6108008216156114e8576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615611508576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615611528576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615611548576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615611568576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615611589576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b620200008216156115a9576e5d6af8dedb81196699c329225ee6040260801c5b620400008216156115c8576d2216e584f5fa1ea926041bedfe980260801c5b620800008216156115e5576b048a170391f7dc42444e8fa20260801c5b60008460020b13156116005780600019816115fc57fe5b0490505b640100000000810615611614576001611617565b60005b60ff16602082901c0192505050919050565b60008080806001600160a01b03808916908a1610158187128015906116ae5760006116628989620f42400362ffffff16620f4240611ef2565b90508261167b576116768c8c8c6001611fa1565b611688565b6116888b8d8c600161201a565b9550858110611699578a96506116a8565b6116a58c8b83866120c5565b96505b506116f8565b816116c5576116c08b8b8b600061201a565b6116d2565b6116d28a8c8b6000611fa1565b93508388600003106116e6578995506116f8565b6116f58b8a8a60000385612111565b95505b6001600160a01b038a811690871614821561175b578080156117175750815b61172d57611728878d8c600161201a565b61172f565b855b955080801561173c575081155b6117525761174d878d8c6000611fa1565b611754565b845b94506117a5565b8080156117655750815b61177b576117768c888c6001611fa1565b61177d565b855b955080801561178a575081155b6117a05761179b8c888c600061201a565b6117a2565b845b94505b811580156117b557508860000385115b156117c1578860000394505b8180156117e057508a6001600160a01b0316876001600160a01b031614155b156117ef57858903935061180c565b611809868962ffffff168a620f42400362ffffff1661215d565b93505b50505095509550955095915050565b8082038281131560008312151461087957600080fd5b8181018281121560008312151461087957600080fd5b60008082600f0b12156118ac57826001600160801b03168260000384039150816001600160801b0316106118a7576040805162461bcd60e51b81526020600482015260026024820152614c5360f01b604482015290519081900360640190fd5b610879565b826001600160801b03168284019150816001600160801b03161015610879576040805162461bcd60e51b81526020600482015260026024820152614c4160f01b604482015290519081900360640190fd5b60006401000276a36001600160a01b03831610801590611939575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b61196e576040805162461bcd60e51b81526020600482015260016024820152602960f91b604482015290519081900360640190fd5b640100000000600160c01b03602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c97908811961790941790921717909117171760808110611a0257607f810383901c9150611a0c565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b14611c0d57886001600160a01b0316611bf1826112f7565b6001600160a01b03161115611c065781611c08565b805b611c0f565b815b9998505050505050505050565b611c246123c8565b826001600160a01b0316846001600160a01b03161115611c42579192915b50604080516060810182526001600160a01b03948516815292909316602083015262ffffff169181019190915290565b600081602001516001600160a01b031682600001516001600160a01b031610611c9a57600080fd5b50805160208083015160409384015184516001600160a01b0394851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301206001600160f81b031960a085015294901b6bffffffffffffffffffffffff191660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b60020b600881901d9161010090910790565b6000808211611d7657600080fd5b600160801b8210611d8957608091821c91015b680100000000000000008210611da157604091821c91015b6401000000008210611db557602091821c91015b620100008210611dc757601091821c91015b6101008210611dd857600891821c91015b60108210611de857600491821c91015b60048210611df857600291821c91015b6002821061082457600101919050565b6000808211611e1657600080fd5b5060ff6001600160801b03821615611e3157607f1901611e39565b608082901c91505b67ffffffffffffffff821615611e5257603f1901611e5a565b604082901c91505b63ffffffff821615611e6f57601f1901611e77565b602082901c91505b61ffff821615611e8a57600f1901611e92565b601082901c91505b60ff821615611ea45760071901611eac565b600882901c91505b600f821615611ebe5760031901611ec6565b600482901c91505b6003821615611ed85760011901611ee0565b600282901c91505b60018216156108245760001901919050565b6000808060001985870986860292508281109083900303905080611f285760008411611f1d57600080fd5b508290049050610fd9565b808411611f3457600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b6000836001600160a01b0316856001600160a01b03161115611fc1579293925b81611fee57611fe9836001600160801b03168686036001600160a01b0316600160601b611ef2565b612011565b612011836001600160801b03168686036001600160a01b0316600160601b61215d565b95945050505050565b6000836001600160a01b0316856001600160a01b0316111561203a579293925b600160601b600160e01b03606084901b166001600160a01b03868603811690871661206457600080fd5b8361209457866001600160a01b03166120878383896001600160a01b0316611ef2565b8161208e57fe5b046120ba565b6120ba6120ab8383896001600160a01b031661215d565b886001600160a01b0316612197565b979650505050505050565b600080856001600160a01b0316116120dc57600080fd5b6000846001600160801b0316116120f257600080fd5b8161210457611fe985858560016121a2565b6120118585856001612283565b600080856001600160a01b03161161212857600080fd5b6000846001600160801b03161161213e57600080fd5b8161215057611fe98585856000612283565b61201185858560006121a2565b600061216a848484611ef2565b90506000828061217657fe5b8486091115610fd957600019811061218d57600080fd5b6001019392505050565b808204910615150190565b600081156122155760006001600160a01b038411156121d8576121d384600160601b876001600160801b0316611ef2565b6121f0565b6001600160801b038516606085901b816121ee57fe5b045b905061220d6122086001600160a01b03881683612366565b612376565b915050610d2e565b60006001600160a01b038411156122435761223e84600160601b876001600160801b031661215d565b61225a565b61225a606085901b6001600160801b038716612197565b905080866001600160a01b03161161227157600080fd5b6001600160a01b038616039050610d2e565b600082612291575083610d2e565b600160601b600160e01b03606085901b16821561231f576001600160a01b038616848102908582816122bf57fe5b0414156122f0578181018281106122ee576122e483896001600160a01b03168361215d565b9350505050610d2e565b505b61231682612311878a6001600160a01b0316868161230a57fe5b0490612366565b612197565b92505050610d2e565b6001600160a01b0386168481029085828161233657fe5b0414801561234357508082115b61234c57600080fd5b8082036122e4612208846001600160a01b038b168461215d565b8082018281101561087957600080fd5b806001600160a01b038116811461082457600080fd5b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b604080516060810182526000808252602082018190529181019190915290565b803561082481612908565b8051801515811461082457600080fd5b8051600281900b811461082457600080fd5b600060a08284031215612426578081fd5b60405160a0810181811067ffffffffffffffff8211171561244357fe5b604052905080823561245481612908565b8152602083013561246481612908565b60208201526040838101359082015261247f606084016124c8565b6060820152608083013561249281612908565b6080919091015292915050565b80516001600160801b038116811461082457600080fd5b805161ffff8116811461082457600080fd5b803562ffffff8116811461082457600080fd5b600080604083850312156124ed578182fd5b823567ffffffffffffffff80821115612504578384fd5b818501915085601f830112612517578384fd5b813560208282111561252557fe5b612537601f8301601f191682016128e4565b9250818352878183860101111561254c578586fd5b818185018285013790820181019490945295939092013593505050565b60006020828403121561257a578081fd5b610fd982612403565b600060a08284031215612594578081fd5b610fd98383612415565b600060c082840312156125af578081fd5b60405160c0810181811067ffffffffffffffff821117156125cc57fe5b60405282356125da81612908565b815260208301356125ea81612908565b602082015260408381013590820152606083013561260781612908565b6060820152612618608084016124c8565b608082015261262960a084016123e8565b60a08201529392505050565b600060c08284031215612646578081fd5b60405160c0810181811067ffffffffffffffff8211171561266357fe5b604052823561267181612908565b8152602083013561268181612908565b60208201526040838101359082015261269c606084016124c8565b6060820152608083013561261881612908565b6000602082840312156126c0578081fd5b610fd98261249f565b600080600080600080600080610100898b0312156126e5578384fd5b6126ee8961249f565b9750602089015180600f0b8114612703578485fd5b80975050604089015195506060890151945060808901518060060b8114612728578485fd5b60a08a015190945061273981612908565b60c08a015190935063ffffffff81168114612752578283fd5b915061276060e08a016123f3565b90509295985092959890939650565b600080600080600080600060e0888a031215612789578081fd5b875161279481612908565b96506127a260208901612403565b95506127b0604089016124b6565b94506127be606089016124b6565b93506127cc608089016124b6565b925060a088015160ff811681146127e1578182fd5b91506127ef60c089016123f3565b905092959891949750929550565b6001600160a01b0391909116815260200190565b60029190910b815260200190565b600060808201868352602060808185015281875180845260a0860191508289019350845b818110156128685784516001600160a01b031683529383019391830191600101612843565b505084810360408601528651808252908201925081870190845b818110156128a457825163ffffffff1685529383019391830191600101612882565b5050505060609290920192909252949350505050565b9384526001600160a01b0392909216602084015263ffffffff166040830152606082015260800190565b60405181810167ffffffffffffffff8111828210171561290057fe5b604052919050565b6001600160a01b038116811461291d57600080fd5b5056fea26469706673582212202341e3eec092b1a8efb1de287c743ddb4a272c545112231437443d8bbf337a1864736f6c63430007060033000000000000000000000000fda619b6d20975be80a10332cd39b9a4b0faa8bb