0x608060405234801561001057600080fd5b506155f6806100206000396000f3fe6080604052600436106100f35760003560e01c80637df289321161008a578063d061f83d11610059578063d061f83d1461029e578063d64b9a6e146102cb578063dedaee82146102f8578063efed25ba1461031857600080fd5b80637df289321461020e57806393bd29ed1461022e57806396abeb701461024e578063aa3d06221461027e57600080fd5b80633729e48c116100c65780633729e48c1461016d57806338d15456146101a0578063552033c4146101ce57806373e056df146101ee57600080fd5b8063047bc23b146100f85780632da01f531461011a578063349258b11461013a57806335668dbf1461014d575b600080fd5b34801561010457600080fd5b50610118610113366004614031565b610338565b005b34801561012657600080fd5b506101186101353660046140bd565b6103ca565b610118610148366004614152565b610480565b34801561015957600080fd5b5061011861016836600461421d565b610808565b34801561017957600080fd5b5061018d610188366004614306565b6108ab565b6040519081526020015b60405180910390f35b3480156101ac57600080fd5b506101c06101bb366004614456565b6109aa565b6040516101979291906145b9565b3480156101da57600080fd5b5061018d6b033b2e3c9fd0803ce800000081565b3480156101fa57600080fd5b5061018d610209366004614674565b610d87565b34801561021a57600080fd5b5061018d610229366004614306565b610e36565b34801561023a57600080fd5b5061011861024936600461468d565b610ef2565b34801561025a57600080fd5b5061026e610269366004614764565b611119565b6040519015158152602001610197565b34801561028a57600080fd5b50610118610299366004614031565b6115e3565b3480156102aa57600080fd5b506102be6102b9366004614456565b61166e565b60405161019791906147b1565b3480156102d757600080fd5b506102eb6102e6366004614a77565b61172a565b6040516101979190614af7565b34801561030457600080fd5b50610118610313366004614bc1565b6118fa565b34801561032457600080fd5b5061018d610333366004614c07565b611908565b6103406119e5565b6000805160206155a183398151915260005b6001600160401b0381168411156103c357828260030160008787856001600160401b031681811061038557610385614c72565b905060200201602081019061039a9190614c88565b63ffffffff168152602081019190915260400160002055806103bb81614cb9565b915050610352565b5050505050565b6103d26119e5565b7fed7099a4d8ec3979659a0931894724cfba9c270625d87b539a3d3a9e869c389f54604051630afd9fa560e31b81526000805160206155a1833981519152916001600160a01b0316906357ecfd2890610435908890889088908890600401614d08565b6020604051808303816000875af1158015610454573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104789190614d2f565b505050505050565b60008061049461048f89614d51565b611a6e565b905060006104aa6104a5888a614d5d565b611b42565b90506104c182606001516001600160a01b03161590565b6104d7576104d782606001518360c00151611ddc565b60006104ee83606001516001600160a01b03161590565b1561054c578260c0015134116105365760405162461bcd60e51b81526020600482015260086024820152672b30b63ab2a2b93960c11b60448201526064015b60405180910390fd5b60c08301516105459034614d6a565b905061054f565b50345b80156105a4576105686000610562611df1565b83611e1f565b825160408051918252602082018390527fcfdcef311681bc7331cafa63028f5d13b58902992591c21ffa4232e6de84ac5c910160405180910390a15b8151600003610618576105bd6060880160408901614d81565b6001600160a01b031683606001516001600160a01b03161461060c5760405162461bcd60e51b81526020600482015260086024820152672a37b5b2b722b93960c11b604482015260640161052d565b8260c001519350610764565b8160008151811061062b5761062b614c72565b6020026020010151608001518360c00151146106755760405162461bcd60e51b815260206004820152600960248201526820b6b7bab73a22b93960b91b604482015260640161052d565b604051630dca792360e21b81523090633729e48c9061069a9086908690600401614df5565b6020604051808303816000875af11580156106b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106dd9190614ebb565b93506106ef6060880160408901614d81565b6001600160a01b031682600184516107079190614d6a565b8151811061071757610717614c72565b6020026020010151606001516001600160a01b0316146107645760405162461bcd60e51b81526020600482015260086024820152672a37b5b2b722b93960c11b604482015260640161052d565b60006107826107728c614d51565b61077c888a614d5d565b8761172a565b9050600085116107c55760405162461bcd60e51b815260206004820152600e60248201526d0627269646765416d6f756e743e360941b604482015260640161052d565b6107d0888683611e48565b83516040517f0f0fd0ad174232a46f92a8d76b425830f45436483106ee965bbe91d3b7d1cd2690600090a25050505050505050505050565b6108106119e5565b6000805160206155a183398151915280546001600160a01b038481166001600160a01b0319928316811784557fed7099a4d8ec3979659a0931894724cfba9c270625d87b539a3d3a9e869c389f805492861692909316821790925560408051928352602083019190915280517f63054ecbbe63792bf8eddbe316e0053e3be0c6013ce193f39f7a7f58983579729281900390910190a1505050565b60003330146108e95760405162461bcd60e51b815260206004820152600a602482015269139bdd111a585b5bdb9960b21b604482015260640161052d565b81600081900361090c57604051630503c3ed60e01b815260040160405180910390fd5b6000848461091b600182614d6a565b81811061092a5761092a614c72565b905060200281019061093c9190614ed4565b61094d906080810190606001614d81565b9050600061095a82611fca565b9050610967878787612050565b8061097183611fca565b61097b9190614d6a565b90508060000361099e5760405163162908e360e11b815260040160405180910390fd5b925050505b9392505050565b6109b2613ea3565b60606109bc613ee8565b6000806109c98682612094565b60ff1690506109d9600183614ef4565b91506109ee6109e98784846120f0565b6121fd565b835160c001526109fe8183614ef4565b9150610a0a8683612094565b60ff169050610a1a600183614ef4565b9150610a278683836120f0565b835152610a348183614ef4565b9150610a408683612094565b60ff169050610a50600183614ef4565b9150610a5d8683836120f0565b835160200152610a6d8183614ef4565b9150610a798683612094565b60ff169050610a89600183614ef4565b9150610a968683836120f0565b835160a00152610aa68183614ef4565b91508551821015610d3a57610abb8683612094565b60ff169050610acb600183614ef4565b91506000610add6109e98885856120f0565b9050610ae98284614ef4565b9250806001600160401b03811115610b0357610b03614256565b604051908082528060200260200182016040528015610b6d57816020015b610b5a6040518060c001604052806060815260200160608152602001606081526020016060815260200160008152602001606081525090565b815260200190600190039081610b215790505b50602085015260005b81811015610d3757610b888885612094565b60ff169250610b98600185614ef4565b9350610ba58885856120f0565b85602001518281518110610bbb57610bbb614c72565b60200260200101516000018190525084602001518181518110610be057610be0614c72565b60200260200101516000015185602001518281518110610c0257610c02614c72565b6020908102919091018101510152610c1a8385614ef4565b9350610c268885612094565b60ff169250610c36600185614ef4565b9350610c438885856120f0565b85602001518281518110610c5957610c59614c72565b602090810291909101015160400152610c728385614ef4565b9350610c7e8885612094565b60ff169250610c8e600185614ef4565b9350610c9b8885856120f0565b85602001518281518110610cb157610cb1614c72565b602090810291909101015160600152610cca8385614ef4565b9350610cd6888561223a565b61ffff169250610ce7600285614ef4565b9350610cf48885856120f0565b85602001518281518110610d0a57610d0a614c72565b602090810291909101015160a00152610d238385614ef4565b935080610d2f81614f0c565b915050610b76565b50505b85518214610d735760405162461bcd60e51b81526020600482015260066024820152652632b722b93960d11b604482015260640161052d565b505080516020909101519094909350915050565b6000805160206155a183398151915280546001600160a01b039081166000908152600360205260408120549092911680610dc5575060009392505050565b6040516335681b5360e21b8152600481018590526001600160a01b0382169063d5a06d4c90602401602060405180830381865afa158015610e0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2e9190614ebb565b949350505050565b6000333014610e745760405162461bcd60e51b815260206004820152600a602482015269139bdd111a585b5bdb9960b21b604482015260640161052d565b816000819003610e9757604051630503c3ed60e01b815260040160405180910390fd5b60008484610ea6600182614d6a565b818110610eb557610eb5614c72565b9050602002810190610ec79190614ed4565b610ed8906080810190606001614d81565b90506000610ee582611fca565b9050610967878787612297565b60006000805160206155a183398151915290506000610f468a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250925061243f915050565b90506000610f5382612463565b90506000610f9688888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250925061243f915050565b90506000610fa382612463565b90506001600160401b038116610fba846001614f25565b6001600160401b0316146110015760405162461bcd60e51b815260206004820152600e60248201526d0dcdedcc6ca40dad2e6dac2e8c6d60931b604482015260640161052d565b8460010160009054906101000a90046001600160a01b03166001600160a01b03166357ecfd288e8e8e8e6040518563ffffffff1660e01b815260040161104a9493929190614d08565b6020604051808303816000875af1158015611069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108d9190614d2f565b506001850154604051630afd9fa560e31b81526001600160a01b03909116906357ecfd28906110c6908c908c908c908c90600401614d08565b6020604051808303816000875af11580156110e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111099190614d2f565b5050505050505050505050505050565b7fed7099a4d8ec3979659a0931894724cfba9c270625d87b539a3d3a9e869c389f546000906000805160206155a1833981519152906001600160a01b031633146111af5760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79206d657373616765207472616e736d69747465722063616e2063616c6044820152601b60fa1b606482015260840161052d565b6000806111f186868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506109aa92505050565b91509150600061120083611a6e565b9050600061120d83611b42565b60c0830151909150600061122082610d87565b905081811015611237576112348282612478565b91505b82516000036112a3578015611256576112568460a00151610562611df1565b6112698460a00151856020015184611e1f565b83516040518381527f5272b980ac59723d5a8fe5be29daff5302abfaf057695289598e842dcf306e489060200160405180910390a26115d1565b80156112d3576112d3836000815181106112bf576112bf614c72565b602002602001015160400151610562611df1565b81836000815181106112e7576112e7614c72565b6020908102919091010151608001526004546001600160a01b031680156113da57806001600160a01b0316635c7027508560008151811061132a5761132a614c72565b602002602001015160a001518660008151811061134957611349614c72565b6020026020010151608001516040518363ffffffff1660e01b8152600401611372929190614f50565b600060405180830381865afa15801561138f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113b79190810190614fd6565b846000815181106113ca576113ca614c72565b602002602001015160a001819052505b604051630dca792360e21b81523090633729e48c906113ff9088908890600401614df5565b6020604051808303816000875af192505050801561143a575060408051601f3d908101601f1916820190925261143791810190614ebb565b60015b61155a5761144661500a565b806308c379a0036114e0575061145a615025565b8061146557506114e2565b6114928560008151811061147b5761147b614c72565b602002602001015160400151876020015186611e1f565b8551604080516020810182526000815290517f9f22c9d1796172ce7238087f7ac46b639876da8736bb55f0d957282f6cccd028916114d2918591906150ae565b60405180910390a2506115cf565b505b3d80801561150c576040519150601f19603f3d011682016040523d82523d6000602084013e611511565b606091505b506115288560008151811061147b5761147b614c72565b85516040517f9f22c9d1796172ce7238087f7ac46b639876da8736bb55f0d957282f6cccd028906114d29084906150d3565b611598856001875161156c9190614d6a565b8151811061157c5761157c614c72565b6020026020010151606001518760a00151838960200151612484565b85516040518281527f5272b980ac59723d5a8fe5be29daff5302abfaf057695289598e842dcf306e489060200160405180910390a2505b505b5060019b9a5050505050505050505050565b6115eb6119e5565b6000805160206155a183398151915260005b6001600160401b0381168411156103c357828260020160008787856001600160401b031681811061163057611630614c72565b90506020020160208101906116459190614c88565b63ffffffff1681526020810191909152604001600020558061166681614cb9565b9150506115fd565b611676613f08565b61167e613f08565b600061168b84600061243f565b9050611696816125f0565b63ffffffff1682526116a781612604565b63ffffffff1660208301526116bb81612618565b63ffffffff1660408301526116cf81612463565b6001600160401b031660608301526116e68161262d565b60808301526116f481612642565b60a083015261170281612657565b60c083015261171e6117138261266c565b62ffffff19166126a3565b60e08301525092915050565b60606000611737836126ec565b8051865180516020808a0151805160a08c0151805160405198995060009861176798978b979690959391016150f4565b60405160208183030381529060405290506000855111156117c257600061178e86516126ec565b90506117be8151826040516020016117a7929190615195565b60408051601f19818403018152919052839061276b565b9150505b60005b85518110156118f0576118dc8682815181106117e3576117e3614c72565b6020026020010151600001515187838151811061180257611802614c72565b60200260200101516000015188848151811061182057611820614c72565b6020026020010151604001515189858151811061183f5761183f614c72565b6020026020010151604001518a868151811061185d5761185d614c72565b602002602001015160600151518b878151811061187c5761187c614c72565b6020026020010151606001518c888151811061189a5761189a614c72565b602002602001015160a00151518d89815181106118b9576118b9614c72565b602002602001015160a001516040516020016117a79897969594939291906151c4565b9150806118e881614f0c565b9150506117c5565b5095945050505050565b61190482826127e8565b5050565b60008061192861191787614d51565b6119218587614d5d565b600061172a565b80519091506000805160206155a1833981519152906119da9061199e907fed7099a4d8ec3979659a0931894724cfba9c270625d87b539a3d3a9e869c38a1600061197560208c018c614c88565b63ffffffff1663ffffffff168152602001908152602001600020546129d790919063ffffffff16565b6002830160006119b160208b018b614c88565b63ffffffff1663ffffffff168152602001908152602001600020546129e390919063ffffffff16565b979650505050505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c600401546001600160a01b03163314611a6c5760405162461bcd60e51b815260206004820152602260248201527f4c69624469616d6f6e643a204d75737420626520636f6e7472616374206f776e60448201526132b960f11b606482015260840161052d565b565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c08101919091526040805160e0810190915282518190611ac19060006129ef565b8152602001611ad38460200151612a4d565b6001600160a01b03168152602001836040015161ffff168152602001611afc8460600151612a4d565b6001600160a01b03168152602001836080015161ffff168152602001611b258460a00151612a4d565b6001600160a01b031681526020018360c001518152509050919050565b6060600082516001600160401b03811115611b5f57611b5f614256565b604051908082528060200260200182016040528015611b9857816020015b611b85613f4e565b815260200190600190039081611b7d5790505b50905060005b8151811015611dd557611bd86000858381518110611bbe57611bbe614c72565b602002602001015160000151612a7090919063ffffffff16565b828281518110611bea57611bea614c72565b6020026020010151600001906001600160a01b031690816001600160a01b031681525050611c3f6000858381518110611c2557611c25614c72565b602002602001015160200151612a7090919063ffffffff16565b828281518110611c5157611c51614c72565b6020026020010151602001906001600160a01b031690816001600160a01b031681525050611ca66000858381518110611c8c57611c8c614c72565b602002602001015160400151612a7090919063ffffffff16565b828281518110611cb857611cb8614c72565b6020026020010151604001906001600160a01b031690816001600160a01b031681525050611d0d6000858381518110611cf357611cf3614c72565b602002602001015160600151612a7090919063ffffffff16565b828281518110611d1f57611d1f614c72565b6020026020010151606001906001600160a01b031690816001600160a01b031681525050838181518110611d5557611d55614c72565b602002602001015160800151828281518110611d7357611d73614c72565b60200260200101516080018181525050838181518110611d9557611d95614c72565b602002602001015160a00151828281518110611db357611db3614c72565b602002602001015160a001819052508080611dcd90614f0c565b915050611b9e565b5092915050565b61190482826001600160a01b03821615612ad5565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546001600160a01b031690565b6001600160a01b03831615611e3e57611e39838383612b68565b505050565b611e398282612b9a565b6000805160206155a1833981519152611e7b611e6a6060860160408701614d81565b82546001600160a01b031685612c35565b80546001600160a01b031663f856ddb684611e996020880188614c88565b6020880135611eae60608a0160408b01614d81565b6040516001600160e01b031960e087901b168152600481019490945263ffffffff92909216602484015260448301526001600160a01b031660648201526020870135608482015260a4016020604051808303816000875af1158015611f17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f3b919061526a565b5060018101546001600160a01b031663f7259a75611f5c6020870187614c88565b6040516001600160e01b031960e084901b168152611f87919060208901359081908890600401615293565b6020604051808303816000875af1158015611fa6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c3919061526a565b60006001600160a01b03821615612048576040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa15801561201f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120439190614ebb565b61204a565b475b92915050565b6004546001600160a01b03168061207a576040516374c37b4360e11b815260040160405180910390fd5b61208b848484600081818088612cfa565b50505050505050565b60006120a1826001614ef4565b835110156120e75760405162461bcd60e51b8152602060048201526013602482015272746f55696e74385f6f75744f66426f756e647360681b604482015260640161052d565b50016001015190565b6060816120fe81601f614ef4565b101561213d5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b604482015260640161052d565b6121478284614ef4565b8451101561218b5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b604482015260640161052d565b6060821580156121aa57604051915060008252602082016040526121f4565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156121e35780518352602092830192016121cb565b5050858452601f01601f1916604052505b50949350505050565b600080805b8351811015611dd5576122158482612094565b6122269060ff16600884901b614ef4565b91508061223281614f0c565b915050612202565b6000612247826002614ef4565b8351101561228e5760405162461bcd60e51b8152602060048201526014602482015273746f55696e7431365f6f75744f66426f756e647360601b604482015260640161052d565b50016002015190565b6122f160405180610120016040528060006001600160a01b03168152602001606081526020016000815260200160008152602001600081526020016000815260200160001515815260200160008152602001600081525090565b6004546001600160a01b031680825261231d576040516374c37b4360e11b815260040160405180910390fd5b6123278383613128565b602082015260005b8160200151518110156103c3578160200151818151811061235257612352614c72565b602090810291909101810151608084015282015151612372826001614ef4565b036123835760a082018390526123b5565b6020820151612393826001614ef4565b815181106123a3576123a3614c72565b60200260200101518260a00181815250505b60008060006123de88888888608001518960a001518a604001518b606001518c60000151612cfa565b9250925092508261241a5781856040018181516123fb9190614ef4565b905250606085018051829190612412908390614ef4565b905250612429565b60006040860181905260608601525b505050808061243790614f0c565b91505061232f565b81516000906020840161245a64ffffffffff8516828461332f565b95945050505050565b600061204a62ffffff198316600c6008613376565b60006109a38284614d6a565b6001600160a01b03831661253d57826001600160a01b0316846001600160a01b03161461253857604051632e1a7d4d60e01b8152600481018390526001600160a01b03851690632e1a7d4d90602401600060405180830381600087803b1580156124ed57600080fd5b505af19250505080156124fe575060015b6125385760405162461bcd60e51b815260206004820152600b60248201526a2bb4ba34323930bba2b93960a91b604482015260640161052d565b61258b565b826001600160a01b0316846001600160a01b03161461258b5760405162461bcd60e51b815260206004820152600a60248201526920b9b9b2ba24b222b93960b11b604482015260640161052d565b6001600160a01b03811630146125ea57816125a584611fca565b10156125df5760405162461bcd60e51b815260206004820152600960248201526809cdee88adcdeeaced60bb1b604482015260640161052d565b6125ea838284611e1f565b50505050565b600061204a62ffffff198316826004613376565b600061204a62ffffff198316600480613376565b600061204a62ffffff19831660086004613376565b600061204a62ffffff198316601460206133a6565b600061204a62ffffff198316603460206133a6565b600061204a62ffffff198316605460206133a6565b600061204a607461268a81601886901c6001600160601b03166152be565b62ffffff19851691906001600160601b03166000613502565b60606000806126bb8460181c6001600160601b031690565b6001600160601b0316905060405191508192506126db848360200161357c565b508181016020016040529052919050565b6040805160f883901b6001600160f81b031916602082015281516001818303018152602190910190915260089190911c906060905b821561204a576040516001600160f81b031960f885901b16602082015261275d90829060210160408051601f198184030181529190529061276b565b9050600883901c9250612721565b6060806040519050835180825260208201818101602087015b8183101561279c578051835260209283019201612784565b50855184518101855292509050808201602086015b818310156127c95780518352602092830192016127b1565b508651929092011591909101601f01601f191660405250905092915050565b80513b612808576040516303777f6960e51b815260040160405180910390fd5b6080810151600081900361282f5760405163391b81e760e21b815260040160405180910390fd5b60408201516060830151600091908261284783611fca565b9050600061285483611fca565b90506000868310612866576000612870565b6128708388614d6a565b90506001600160a01b038516156128a75761289085896020015189612c35565b80156128a2576128a285333084613711565b6128ab565b8695505b60008089600001516001600160a01b0316888b60a001516040516128cf91906152e6565b60006040518083038185875af1925050503d806000811461290c576040519150601f19603f3d011682016040523d82523d6000602084013e612911565b606091505b5091509150816129425760006129268261376b565b90508060405162461bcd60e51b815260040161052d9190614af7565b7f7bfdfdb5e3a3776976e53cb0607060f54c5312701c8cba1155cc4d5394440b388b8b600001518c60400151898d8961297a8d611fca565b6129849190614d6a565b604080519687526001600160a01b0395861660208801529385169386019390935292166060840152608083019190915260a08201524260c082015260e00160405180910390a15050505050505050505050565b60006109a382846152f8565b60006109a38284614ef4565b60006129fc826020614ef4565b83511015612a445760405162461bcd60e51b8152602060048201526015602482015274746f427974657333325f6f75744f66426f756e647360581b604482015260640161052d565b50016020015190565b60008151601403612a635761204a826000612a70565b506000919050565b919050565b6000612a7d826014614ef4565b83511015612ac55760405162461bcd60e51b8152602060048201526015602482015274746f416464726573735f6f75744f66426f756e647360581b604482015260640161052d565b500160200151600160601b900490565b81600003612af65760405163162908e360e11b815260040160405180910390fd5b8015612b1c57813414611e395760405163162908e360e11b815260040160405180910390fd5b6000612b2784611fca565b9050612b3584333086613711565b8281612b4086611fca565b612b4a9190614d6a565b146125ea5760405163162908e360e11b815260040160405180910390fd5b6001600160a01b038316612b8f5760405163346fafc360e21b815260040160405180910390fd5b611e398383836137e2565b6001600160a01b038216612bc1576040516321f7434560e01b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612c0e576040519150601f19603f3d011682016040523d82523d6000602084013e612c13565b606091505b5050905080611e3957604051635a04673760e01b815260040160405180910390fd5b6001600160a01b038316612c4857505050565b6001600160a01b038216612c6f576040516363ba9bff60e01b815260040160405180910390fd5b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa158015612cbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ce39190614ebb565b9050818110156125ea576125ea8484600019613845565b6000806000612d07613fa8565b8a8a8a818110612d1957612d19614c72565b9050602002810190612d2b9190614ed4565b612d3490615317565b8082526080015160208201526001600160a01b038516637281d9ac8c8c612d5c60018d614d6a565b818110612d6b57612d6b614c72565b9050602002810190612d7d9190614ed4565b612d8b9060a0810190615323565b896040518463ffffffff1660e01b8152600401612daa93929190615369565b600060405180830381865afa158015612dc7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612def919081019061538d565b506040820152805160800151612e06908890614ef4565b6060820152885b888110156131055788612e21826001614ef4565b148015612e2e5750600087115b15612eb357815160a00151604051631ca0766b60e21b81526001600160a01b03881691637281d9ac91612e6691908b90600401614f50565b600060405180830381865afa158015612e83573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612eab919081019061538d565b835160a00152505b815160800151606083015114612f535760608201518251608090810191909152825160a08101519101516040516305c7027560e41b81526001600160a01b03891692635c70275092612f0792600401614f50565b600060405180830381865afa158015612f24573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612f4c9190810190614fd6565b825160a001525b8151606001516001600160a01b031660808301819052612f7290611fca565b606083015281516020908101516001600160a01b0316600090815290819052604090205460ff168015612fbf57508151516001600160a01b031660009081526020819052604090205460ff165b8015612ffc5750815160a00151600190600090612fde9082600461395a565b612fe7906153c9565b815260208101919091526040016000205460ff165b61301957604051632514e60160e21b815260040160405180910390fd5b8c518251604051636f6d774160e11b8152309263dedaee829261303e926004016153ed565b600060405180830381600087803b15801561305857600080fd5b505af1925050508015613069575060015b61308657600082602001518360400151945094509450505061311a565b81606001516130988360800151611fca565b6130a29190614d6a565b60608301528a6130b3826001614ef4565b10156130f3578b8b6130c6836001614ef4565b8181106130d5576130d5614c72565b90506020028101906130e79190614ed4565b6130f090615317565b82525b806130fd81614f0c565b915050612e0d565b50600181602001518260400151935093509350505b985098509895505050505050565b606060008383600081811061313f5761313f614c72565b90506020028101906131519190614ed4565b613162906060810190604001614d81565b90506000805b8481101561321157826001600160a01b031686868381811061318c5761318c614c72565b905060200281019061319e9190614ed4565b6131af906060810190604001614d81565b6001600160a01b03161480156131ec575060008686838181106131d4576131d4614c72565b90506020028101906131e69190614ed4565b60800135115b156131ff576131fc600183614ef4565b91505b8061320981614f0c565b915050613168565b506000816001600160401b0381111561322c5761322c614256565b604051908082528060200260200182016040528015613255578160200160208202803683370190505b5090506000805b8681101561332357846001600160a01b031688888381811061328057613280614c72565b90506020028101906132929190614ed4565b6132a3906060810190604001614d81565b6001600160a01b03161480156132e0575060008888838181106132c8576132c8614c72565b90506020028101906132da9190614ed4565b60800135115b1561331157808383815181106132f8576132f8614c72565b602090810291909101015261330e600183614ef4565b91505b8061331b81614f0c565b91505061325c565b50909695505050505050565b60008061333c8385614ef4565b905060405181111561334c575060005b806000036133615762ffffff199150506109a3565b5050606092831b9190911790911b1760181b90565b6000613383826020615406565b61338e906008615429565b60ff1661339c8585856133a6565b901c949350505050565b60008160ff166000036133bb575060006109a3565b6133ce8460181c6001600160601b031690565b6001600160601b03166133e460ff841685614ef4565b11156134485761342f6134008560781c6001600160601b031690565b6001600160601b031661341c8660181c6001600160601b031690565b6001600160601b0316858560ff16613a18565b60405162461bcd60e51b815260040161052d9190614af7565b60208260ff1611156134c25760405162461bcd60e51b815260206004820152603a60248201527f54797065644d656d566965772f696e646578202d20417474656d70746564207460448201527f6f20696e646578206d6f7265207468616e203332206279746573000000000000606482015260840161052d565b6008820260006134db8660781c6001600160601b031690565b6001600160601b031690506000600160ff1b60001984011d91909501511695945050505050565b6000806135188660781c6001600160601b031690565b6001600160601b0316905061352c86613a86565b846135378784614ef4565b6135419190614ef4565b11156135545762ffffff19915050610e2e565b61355e8582614ef4565b90506135728364ffffffffff16828661332f565b9695505050505050565b600062ffffff19808416036135e45760405162461bcd60e51b815260206004820152602860248201527f54797065644d656d566965772f636f7079546f202d204e756c6c20706f696e7460448201526732b9103232b932b360c11b606482015260840161052d565b6135ed83613abf565b61364d5760405162461bcd60e51b815260206004820152602b60248201527f54797065644d656d566965772f636f7079546f202d20496e76616c696420706f60448201526a34b73a32b9103232b932b360a91b606482015260840161052d565b60006136628460181c6001600160601b031690565b6001600160601b0316905060006136828560781c6001600160601b031690565b6001600160601b031690506000806040519150858211156136a35760206060fd5b8386858560045afa9050806136e95760405162461bcd60e51b815260206004820152600c60248201526b6964656e74697479204f4f4760a01b604482015260640161052d565b6119da6136f68860d81c90565b64ffffffffff60601b606091821b168817901b851760181b90565b6001600160a01b0384166137385760405163346fafc360e21b815260040160405180910390fd5b6001600160a01b03821661375f576040516321f7434560e01b815260040160405180910390fd5b6125ea84848484613afc565b60606044825110156137b057505060408051808201909152601d81527f5472616e73616374696f6e2072657665727465642073696c656e746c79000000602082015290565b60006137cc60048085516137c49190614d6a565b8591906120f0565b9050808060200190518101906109a39190615452565b6040516001600160a01b038316602482015260448101829052611e3990849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613b34565b8015806138bf5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015613899573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138bd9190614ebb565b155b61392a5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b606482015260840161052d565b6040516001600160a01b038316602482015260448101829052611e3990849063095ea7b360e01b9060640161380e565b6060818310801561396c575083518211155b6139ac5760405162461bcd60e51b8152602060048201526011602482015270446174614c656e677468206572726f722160781b604482015260640161052d565b604080516020810190915260008152835b838110156121f457818682815181106139d8576139d8614c72565b602001015160f81c60f81b6040516020016139f492919061549a565b60405160208183030381529060405291508080613a1090614f0c565b9150506139bd565b60606000613a2586613c06565b9150506000613a3386613c06565b9150506000613a4186613c06565b9150506000613a4f86613c06565b91505083838383604051602001613a6994939291906154c9565b604051602081830303815290604052945050505050949350505050565b6000613a9b8260181c6001600160601b031690565b613aae8360781c6001600160601b031690565b016001600160601b03169050919050565b6000613acb8260d81c90565b64ffffffffff1664ffffffffff03613ae557506000919050565b6000613af083613a86565b60405110159392505050565b6040516001600160a01b03808516602483015283166044820152606481018290526125ea9085906323b872dd60e01b9060840161380e565b6000613b89826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613cb49092919063ffffffff16565b805190915015611e395780806020019051810190613ba79190614d2f565b611e395760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161052d565b600080601f5b600f8160ff161115613c5b576000613c25826008615429565b60ff1685901c9050613c3681613cc3565b61ffff16841793508160ff16601014613c5157601084901b93505b5060001901613c0c565b50600f5b60ff8160ff161015613cae576000613c78826008615429565b60ff1685901c9050613c8981613cc3565b61ffff16831792508160ff16600014613ca457601083901b92505b5060001901613c5f565b50915091565b6060610e2e8484600085613cf5565b6000613cd560048360ff16901c613e1b565b60ff1661ffff919091161760081b613cec82613e1b565b60ff1617919050565b606082471015613d565760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161052d565b6001600160a01b0385163b613dad5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161052d565b600080866001600160a01b03168587604051613dc991906152e6565b60006040518083038185875af1925050503d8060008114613e06576040519150601f19603f3d011682016040523d82523d6000602084013e613e0b565b606091505b50915091506119da828286613e6a565b6040805180820190915260108082526f181899199a1a9b1b9c1cb0b131b232b360811b6020830152600091600f84169182908110613e5b57613e5b614c72565b016020015160f81c9392505050565b60608315613e795750816109a3565b825115613e895782518084602001fd5b8160405162461bcd60e51b815260040161052d9190614af7565b6040518060e001604052806060815260200160608152602001600061ffff16815260200160608152602001600061ffff16815260200160608152602001600081525090565b6040518060400160405280613efb613ea3565b8152602001606081525090565b604080516101008101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c082019290925260e081019190915290565b6040518060c0016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008152602001606081525090565b6040518060a00160405280613fbb613f4e565b815260200160008152602001600081526020016000815260200160006001600160a01b031681525090565b60008083601f840112613ff857600080fd5b5081356001600160401b0381111561400f57600080fd5b6020830191508360208260051b850101111561402a57600080fd5b9250929050565b60008060006040848603121561404657600080fd5b83356001600160401b0381111561405c57600080fd5b61406886828701613fe6565b909790965060209590950135949350505050565b60008083601f84011261408e57600080fd5b5081356001600160401b038111156140a557600080fd5b60208301915083602082850101111561402a57600080fd5b600080600080604085870312156140d357600080fd5b84356001600160401b03808211156140ea57600080fd5b6140f68883890161407c565b9096509450602087013591508082111561410f57600080fd5b5061411c8782880161407c565b95989497509550505050565b600060e0828403121561413a57600080fd5b50919050565b60006060828403121561413a57600080fd5b60008060008060008060c0878903121561416b57600080fd5b86356001600160401b038082111561418257600080fd5b61418e8a838b01614128565b975060208901359150808211156141a457600080fd5b6141b08a838b01613fe6565b90975095508591506141c58a60408b01614140565b945060a08901359150808211156141db57600080fd5b506141e889828a01613fe6565b979a9699509497509295939492505050565b6001600160a01b038116811461420f57600080fd5b50565b8035612a6b816141fa565b6000806040838503121561423057600080fd5b823561423b816141fa565b9150602083013561424b816141fa565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60e081018181106001600160401b038211171561428b5761428b614256565b60405250565b601f8201601f191681016001600160401b03811182821017156142b6576142b6614256565b6040525050565b6040516142c98161426c565b90565b60405160c081016001600160401b03811182821017156142ee576142ee614256565b60405290565b803561ffff81168114612a6b57600080fd5b600080600083850361010081121561431d57600080fd5b60e081121561432b57600080fd5b506040516143388161426c565b84358152602085013561434a816141fa565b602082015261435b604086016142f4565b6040820152606085013561436e816141fa565b606082015261437f608086016142f4565b608082015261439060a08601614212565b60a082015260c08581013590820152925060e08401356001600160401b038111156143ba57600080fd5b6143c686828701613fe6565b9497909650939450505050565b60006001600160401b038211156143ec576143ec614256565b50601f01601f191660200190565b600082601f83011261440b57600080fd5b8135614416816143d3565b6040516144238282614291565b82815285602084870101111561443857600080fd5b82602086016020830137600092810160200192909252509392505050565b60006020828403121561446857600080fd5b81356001600160401b0381111561447e57600080fd5b610e2e848285016143fa565b60005b838110156144a557818101518382015260200161448d565b838111156125ea5750506000910152565b600081518084526144ce81602086016020860161448a565b601f01601f19169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b858110156145ac578284038952815160c08151818752614522828801826144b6565b915050868201518682038888015261453a82826144b6565b9150506040808301518783038289015261455483826144b6565b925050506060808301518783038289015261456f83826144b6565b92505050608080830151818801525060a0808301519250868203818801525061459881836144b6565b9a87019a9550505090840190600101614500565b5091979650505050505050565b604081526000835160e060408401526145d66101208401826144b6565b90506020850151603f19808584030160608601526145f483836144b6565b925061ffff604088015116608086015260608701519150808584030160a086015261461f83836144b6565b92506080870151915061463860c086018361ffff169052565b60a08701519150808584030160e08601525061465482826144b6565b91505060c0850151610100840152828103602084015261245a81856144e2565b60006020828403121561468657600080fd5b5035919050565b6000806000806000806000806080898b0312156146a957600080fd5b88356001600160401b03808211156146c057600080fd5b6146cc8c838d0161407c565b909a50985060208b01359150808211156146e557600080fd5b6146f18c838d0161407c565b909850965060408b013591508082111561470a57600080fd5b6147168c838d0161407c565b909650945060608b013591508082111561472f57600080fd5b5061473c8b828c0161407c565b999c989b5096995094979396929594505050565b803563ffffffff81168114612a6b57600080fd5b6000806000806060858703121561477a57600080fd5b61478385614750565b93506020850135925060408501356001600160401b038111156147a557600080fd5b61411c8782880161407c565b60208152600063ffffffff8084511660208401528060208501511660408401525060408301516147e9606084018263ffffffff169052565b5060608301516001600160401b038116608084015250608083015160a083015260a083015160c083015260c083015160e083015260e0830151610100808185015250610e2e6101208401826144b6565b600060e0828403121561484b57600080fd5b6148536142bd565b905081356001600160401b038082111561486c57600080fd5b614878858386016143fa565b8352602084013591508082111561488e57600080fd5b61489a858386016143fa565b60208401526148ab604085016142f4565b604084015260608401359150808211156148c457600080fd5b6148d0858386016143fa565b60608401526148e1608085016142f4565b608084015260a08401359150808211156148fa57600080fd5b50614907848285016143fa565b60a08301525060c082013560c082015292915050565b60006001600160401b038084111561493757614937614256565b8360051b60206040805161494d83850182614291565b878152945091850191848281018985111561496757600080fd5b8791505b84821015614a6a578135868111156149835760008081fd5b880160c0818c0312156149965760008081fd5b61499e6142cc565b8135888111156149ae5760008081fd5b6149ba8d8285016143fa565b82525085820135888111156149cf5760008081fd5b6149db8d8285016143fa565b878301525084820135888111156149f25760008081fd5b6149fe8d8285016143fa565b868301525060608083013589811115614a175760008081fd5b614a238e8286016143fa565b828401525050608080830135818301525060a08083013589811115614a485760008081fd5b614a548e8286016143fa565b918301919091525082525090830190830161496b565b5050505050509392505050565b600080600060608486031215614a8c57600080fd5b83356001600160401b0380821115614aa357600080fd5b614aaf87838801614839565b94506020860135915080821115614ac557600080fd5b508401601f81018613614ad757600080fd5b614ae68682356020840161491d565b925050604084013590509250925092565b6020815260006109a360208301846144b6565b600060c08284031215614b1c57600080fd5b60405160c081016001600160401b038282108183111715614b3f57614b3f614256565b8160405282935084359150614b53826141fa565b818352614b6260208601614212565b6020840152614b7360408601614212565b6040840152614b8460608601614212565b60608401526080850135608084015260a0850135915080821115614ba757600080fd5b50614bb4858286016143fa565b60a0830152505092915050565b60008060408385031215614bd457600080fd5b8235915060208301356001600160401b03811115614bf157600080fd5b614bfd85828601614b0a565b9150509250929050565b60008060008060a08587031215614c1d57600080fd5b84356001600160401b0380821115614c3457600080fd5b614c4088838901614128565b9550614c4f8860208901614140565b94506080870135915080821115614c6557600080fd5b5061411c87828801613fe6565b634e487b7160e01b600052603260045260246000fd5b600060208284031215614c9a57600080fd5b6109a382614750565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818103614cd557614cd5614ca3565b6001019392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526000614d1c604083018688614cdf565b82810360208401526119da818587614cdf565b600060208284031215614d4157600080fd5b815180151581146109a357600080fd5b600061204a3683614839565b60006109a336848461491d565b600082821015614d7c57614d7c614ca3565b500390565b600060208284031215614d9357600080fd5b81356109a3816141fa565b600060018060a01b03808351168452806020840151166020850152806040840151166040850152806060840151166060850152506080820151608084015260a082015160c060a0850152610e2e60c08501826144b6565b825181526020808401516001600160a01b039081168284015260408086015161ffff908116918501919091526060808701518316908501526080808701519091169084015260a0808601519091169083015260c0808501519083015261010060e08301819052835190830181905260009161012080850192600581901b86019091019190868201855b82811015614ead5761011f19888603018652614e9b858351614d9e565b95840195945090830190600101614e7e565b509298975050505050505050565b600060208284031215614ecd57600080fd5b5051919050565b6000823560be19833603018112614eea57600080fd5b9190910192915050565b60008219821115614f0757614f07614ca3565b500190565b600060018201614f1e57614f1e614ca3565b5060010190565b60006001600160401b03808316818516808303821115614f4757614f47614ca3565b01949350505050565b604081526000614f6360408301856144b6565b90508260208301529392505050565b6000614f7d836143d3565b604051614f8a8282614291565b809250848152858585011115614f9f57600080fd5b614fad85602083018661448a565b50509392505050565b600082601f830112614fc757600080fd5b6109a383835160208501614f72565b600060208284031215614fe857600080fd5b81516001600160401b03811115614ffe57600080fd5b610e2e84828501614fb6565b600060033d11156142c95760046000803e5060005160e01c90565b600060443d10156150335790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561506257505050505090565b828501915081518181111561507a5750505050505090565b843d87010160208285010111156150945750505050505090565b6150a360208286010187614291565b509095945050505050565b6040815260006150c160408301856144b6565b828103602084015261245a81856144b6565b60408152600060408201526060602082015260006109a360608301846144b6565b600060ff60f81b808b60f81b1683528951615116816001860160208e0161448a565b8084019050818a60f81b1660018201528851615139816002840160208d0161448a565b808201915050818860f81b166002820152865161515d816003840160208b0161448a565b808201915050818660f81b1660038201528451915061518382600483016020880161448a565b016004019a9950505050505050505050565b60ff60f81b8360f81b168152600082516151b681600185016020870161448a565b919091016001019392505050565b600060ff60f81b808b60f81b16835289516151e6816001860160208e0161448a565b8084019050818a60f81b1660018201528851615209816002840160208d0161448a565b808201915050818860f81b1660028201528651915061522f826003830160208a0161448a565b81810191505061ffff60f01b8560f01b166003820152835161525881600584016020880161448a565b016005019a9950505050505050505050565b60006020828403121561527c57600080fd5b81516001600160401b03811681146109a357600080fd5b63ffffffff8516815283602082015282604082015260806060820152600061357260808301846144b6565b60006001600160601b03838116908316818110156152de576152de614ca3565b039392505050565b60008251614eea81846020870161448a565b600081600019048311821515161561531257615312614ca3565b500290565b600061204a3683614b0a565b6000808335601e1984360301811261533a57600080fd5b8301803591506001600160401b0382111561535457600080fd5b60200191503681900382131561402a57600080fd5b60408152600061537d604083018587614cdf565b9050826020830152949350505050565b600080604083850312156153a057600080fd5b8251915060208301516001600160401b038111156153bd57600080fd5b614bfd85828601614fb6565b8051602080830151919081101561413a5760001960209190910360031b1b16919050565b828152604060208201526000610e2e6040830184614d9e565b600060ff821660ff84168082101561542057615420614ca3565b90039392505050565b600060ff821660ff84168160ff048111821515161561544a5761544a614ca3565b029392505050565b60006020828403121561546457600080fd5b81516001600160401b0381111561547a57600080fd5b8201601f8101841361548b57600080fd5b610e2e84825160208401614f72565b600083516154ac81846020880161448a565b6001600160f81b0319939093169190920190815260010192915050565b7f54797065644d656d566965772f696e646578202d204f76657272616e20746865815274040ecd2caee5c40a6d8d2c6ca40d2e640c2e84060f605b1b60208201526001600160d01b031960d086811b821660358401526e040eed2e8d040d8cadccee8d04060f608b1b603b840181905286821b8316604a8501527f2e20417474656d7074656420746f20696e646578206174206f666673657420306050850152600f60fb1b607085015285821b83166071850152607784015283901b166086820152601760f91b608c8201526000608d820161357256feed7099a4d8ec3979659a0931894724cfba9c270625d87b539a3d3a9e869c389ea26469706673582212201fbbbf6f57bf79aea5484c5906f9e44c9fdee6b3607ec8eb4e34f87e91674c1c64736f6c634300080d0033